package com.test.restassured;

import io.restassured.response.Response;

import java.io.File;

import static io.restassured.RestAssured.given;

public class FirstDemo {
    public static void main(String[] args) {
        // 发起接口请求的四大要素：请求方法，接口地址，请求头（可选），请求数据（可选）
        System.out.println("API Test Demo, 链式调用");
        // given() 用来设置请求预设：请求头、请求数据
        // when() 代表要去执行的操作：get/post/put/delete/patch
        // then() 代表请求结束之后要做的操作：验证响应结果、提取响应数据等

        // 登录，post
        given().
                header("Content-Type", "application/json; charset=UTF-8").
                body("{\"principal\":\"xxxxx_py\",\"credentials\":\"xxxxxxxx\",\"appType\":3,\"loginType\":0}").
        when().
                post("http://mall.xxxxxxxx.com:8107/login").
        then().
                log().all();

        // 通过RESTAssured发送get请求
        given().
        when().
                get("http://mall.xxxxxxxx.com:8107/search/searchProdPage?prodName=真皮圆筒包").
        then().
                // log().all();
                log().body();

        // 通过given设置请求参数 - 查询参数
        given().
                queryParam("prodName", "真皮圆筒包").
        when().
                get("http://mall.xxxxxxxx.com:8107/search/searchProdPage").
        then().
                log().body();

        // 发送post请求
        // 传参类型：JSON传参、FORM表单、XML传参、Text文本传参、大文件（大量数据）传参-文件上传
        Response response_login = given().
                header("Content-Type", "application/json; charset=UTF-8").
                body("{\"principal\":\"lemon_py\",\"credentials\":\"12345678\",\"appType\":3,\"loginType\":0}").
        when().
                post("http://mall.xxxxxxxx.com:8107/login").
        then().
                log().body().extract().response();
        Object token_type = response_login.jsonPath().get("token_type");
        Object access_token = response_login.jsonPath().get("access_token");
        String token = "" + token_type + access_token;

        // 个人中心，修改头像
        // 1. 通过 multiPart 上传文件
        Response response = given().
                header("Content-Type", "multipart/form-data").
                header("Authorization", token).
                multiPart(new File("src/test/resources/flower.jpg")).
        when().
                post("http://shop.xxxxxxxx.com:8107/p/file/upload").
        then().
                log().all().extract().response();
        String url = response.jsonPath().get("resourcesUrl");
        String path = response.jsonPath().get("filePath");

        // 2. 保存用户信息，与 put 请求类型
        Response res = given().
                header("Content-Type", "application/json; charset=UTF-8").
                header("Authorization", token).
                body("{\"avatarUrl\":\"" + url + path + "\",\"nickName\":\"lemon_py\",\"userMobile\":\"13552460188\",\"auth\":{}}").
        when().
                put("http://shop.xxxxxxxx.com:8107/p/user/setUserInfo").
        then().
                log().all().extract().response();
        assert res.statusCode() == 200;

    }
}

/*
修改头像测试地址：http://mall.xxxxxxxx.com:3344/user-center/uc-account?status=
fiddle 抓包，分析请求参数，raw/json
分两步：1. 上传文件； 2. 保存用户信息
 1. 上传文件
 POST http://shop.xxxxxxxx.com:8107/p/file/upload
 2. 保存用户信息
 PUT http://shop.xxxxxxxx.com:8107/p/user/setUserInfo

 */
